【网络协议详解】 |
您所在的位置:网站首页 › 加域 找不到网络路径 › 【网络协议详解】 |
目录
🕒 1. 概述🕒 2. BGP 发言人🕒 3. 工作原理🕒 4. 报文格式🕘 4.1 报文首部🕘 4.2 打开报文🕘 4.3 更新报文🕘 4.4 保活报文🕘 4.5 通知报文
🕒 5. BGP 的路径属性🕘 5.1 origin 属性🕘 5.2 AS_PATH 属性🕘 5.3 Next Hop 属性🕘 5.4 Local-Preference 属性🕘 5.5 MED 属性🕘 5.6 Community 属性🕘 5.7 BGP路径选择过程
🕒 6. 路由重分布🕘 6.1 实例🕘 6.2 选择最佳路由🕤 6.2.1 改变管理距离🕤 6.2.2 改变默认度量值
🕒 7. 实验
🕒 1. 概述
BGP(Border Gateway Protocol),边界网关协议。 一种自治系统间的选路协议,在 AS 之间交换网络的可达性信息。根据可达性信息,路由器能够构造 AS 之间的连接关系图,从而计算出到达目的网络的路由。标准: RFC 4271:BGP4,支持 CIDR 和路由聚集,用于 IPv4 网络的 AS 间路由。RFC 4760:扩展了 BGP4,支持不同网络层协议的 AS 间路由。 🕒 2. BGP 发言人自治系统中,运行 BGP 协议的路由器称为 BGP 发言人(BGP speaker)。 每个 BGP 发言人都有一个 4 字节的 BGP 标识符(BGP identifier);标识符在 BGP 发言人启动过程中确定,通常是其某个接口的 IP 地址。BGP 发言人通过与其他自治系统的 BGP 发言人交换路径信息来学习路由。 建立连接的两个 BGP 发言人互称为对等发言人(peer)。 内部对等发言人(internal peer;IBGP):位于同一个 AS。如R1和R2。外部对等发言人(external peer;EBGP):位于不同 AS。如R1和R3。两个 BGP 发言人建立 TCP 连接后: 发送打开报文,协商路由信息交换参数;发送更新报文,交换各自的 BGP 路由表。 BGP 发言人并不周期性交换路由表,而采用增量式路由更新方法: 只在路由表发生改变时,才向对等发言人通知改变的路由,包括增加新路由,或撤销失效路由。只交换管理策略允许的路由。使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer) BGP 发言人之间周期性交换保活报文,以检测对方是否活跃。 若一段时间内接收不到对方的保活报文,就认为对方不再活跃,关闭与对方的连接。 协议运行过程中若发生错误,BGP 发言人向对方发送通知报文,并关闭与对方的连接。 连接关闭后,BGP 发言人撤销对方通知的所有路由。如果一个 AS 与多个 AS 连接,该 AS 往往会有多个 BGP 发言人。 必须确保自治系统内部路由的一致性:需要在所有 BGP 发言人之间建立对等关系。 为防止在 AS 内部出现环路路由,BGP 发言人不会将从 IBGP 学习到的路由再通告给其他 IBGP (称为“水平分割”)。 🕒 4. 报文格式BGP4 定义了 4 种报文: 类型报文名称1打开(OPEN)报文2更新(UPDATE)报文3通知(NOTIFICATION)报文4保活(KEEPALIVE)报文 🕘 4.1 报文首部BGP 发言人与对等 BGP 发言人建立 TCP 连接后,首先向对方发送一个打开报文 ,协商路由信息交换参数。 接收到打开报文后,BGP 发言人用保活报文响应。 1字节的“版本”字段,指明BGP协议的版本号,对BGP4协议设置为4。2字节的“自治系统号”,是发送方所属自治系统的编号。2字节的“保持时间”,是发送方建议的连接保持时间,以秒为单位。接收方将以自己配置的保持时间和发送方建议的保持时间中的较小者作为实际的连接保持时间。保持时间指明了从对方接收到下一个BGP报文的最长等待时间。若超过保持时间后还没有从对方接收到任何报文,就认为对方不可达,关闭与对方的TCP连接。4字节的“BGP标识符”,即发送方的BGP标识符。BGP发言人在与所有对等发言人通信时必须使用相同的标识符。1字节的“选项参数长度”,指明了报文中包含的所有选项参数的总长度,以字节为单位。若为 0,表明报文中没有选项参数。剩余数据则是选项参数。打开报文可包含多个选项参数,每个参数用一个三元组(TLV结构)表示: “参数类型”, 占1个字节,指明参数的数据类型,如整型、字符串等。“参数长度”, 占1个字节,指明“参数值”字段的长度,以字节为单位BGP 发言人通过发送更新报文通知对等发言人路由信息。 BGP4 中路由被定义为:一组目的地址以及到达这些目的地址的一条路径;路径用一系列属性描述。 路径属性包括:经过的 AS 列表(路径)、路由来源、下一跳地址、路由是否被聚集等;到达这组目的地址的路径相同。一个 BGP 更新报文中可以包含一条增加的新路由,以及多条要撤销的失效路由。 撤销路由用“撤销路由长度”和“撤销路由”两个字段指明。 “撤销路由长度”字段,占2字节,指明“撤销路由”字段的长度,以字节为单位。为 0 表示没有要撤销的路由,报文中也不包含撤销路由字段。“撤销路由”字段长度可变,列出了一组要撤销路由的目的网络地址。BGP4采用了一种压缩表示法,即采用二元组 表示网络地址,其中“前缀长度”占1字节,指明32位的IP地址中网络前缀所占的位数;而“前缀”只有IP地址中包含网络前缀的字节,即前缀长度小于等于8时,前缀只包含地址的第一个字节;前缀长度在9到16之间时,包含前两个字节;前缀长度在17到24之间时,包含前三个字节;当前缀长度大于等于25时则包含所有四个字节。特别地,若前缀长度为0,表示是默认路由。新增的路由“路径属性总长度”、“路径属性”和“网络层可达性信息”三个字段共同描述。 “路径属性总长度”,占2字节,是紧接着的“路径属性”字段的总长度,单位是字节。如果是 0 表示报文中不包含新增路由,也不存在“路径属性”和“网络层可达性信息”字段。“路径属性”字段,长度可变,描述了新增的路由,是新路由的一组属性值。每个属性为TLV结构。其中“类型”占2个字节,第一个字节是“属性类型标志”,第二个字节是“属性类型代码”;“长度”指明了属性值所占的字节数,依赖于属性类型标志中“扩展长度位”是否置位,占1个字节或2个字节。一个更新报文中,一种路径属性只能出现一次。“网络层可达性信息”字段长度可变,列出了一组通过“路径属性”字段指明的路径可到达的目的地址。目的地址的编码方式与“撤销路由”字段中相同。BGP 发言人根据接收的更新报文构造自治系统之间的连接关系图,计算出到达目的网络的下一跳地址。 BGP 发言人周期性向对等发言人发送保活报文,以维持与对方的连接。 保活报文发送间隔不能小于 1 秒,通常设置为保持时间的 1/3。 如果保持时间是 0,不发送保活报文。保活报文只有标准的报文首部(19字节)而不包含其他数据。 当协议运行发生错误时,BGP 发言人向对等发言人发送通知报文,并立即关闭相关的 TCP 连接。 BGP结合丰富的路径属性,很好地控制路由信息的传递,实现路由的选择。 BGP路径属性是一组描述BGP前缀特性的参数 BGP路径属性可以被分为四大类: 公认必遵(Well-known mandatory)公认任意(Well-known discretionary)可选过渡(Optional transitive)可选非过渡(Optional non-transitive)BGP 必须识别所有公认属性。可选属性不要求所有BGP路由器都必须能识别。 公认属性包括强制和任意两大类: 其中强制属性必须包含在每一个UPDATE 消息里,即公认必遵属性。其他任意属性则可能会被包含在某些具体UPDATE 消息中。可选属性包括过渡和非过渡两大类: 其中对于过渡属性,如果BGP路由器不能识别该属性,也要接收携带该属性的路由更新,而且将该路由通告给其他对等体,也必须携带该属性。对于非过渡属性,如果BGP路由器不能识别该属性,该路由器会忽略携带该属性的路由信息,也不通告给其他对等体。常见BGP路由属性: 1、Origin 2、AS_PATH 3、Next hop 4、MED(Multi-Exit-DISC) 5、Local-Preference 6、Atomic-Aggregate 7、Aggregator 8、Community 9、Originator-ID 10、Cluster-List 11、MP_Reach_NLRI 12、MP_Unreach_NLRI 13、Extended_Communities 以下列出几种常用的属性: Origin:起源属性。定义路由信息的来源,标记一条路由是怎样成为BGP路由的。As_PATH:AS路径属性。是路由经过的AS的序列,即列出此路由在传递过程中经过了哪些AS。它可以防止路由循环,并用于路由的过滤和选择。Next hop:下一跳属性。包含到达更新消息所列网络的下一跳边界路由器的IP地址。MED属性:当某个AS有多个入口时,可以用MED属性来帮助其外部的AS选择一个较好的入口路径。一条路由的MED值越小,其优先级越高。Local-Preference:本地优先级属性。用于在AS内优选到达某一目的地的路由。反映了BGP Speaker对每条BGP路由的偏好程度。属性值越大越优。Community:团体属性。团体属性标识了一组具有相同特征的路由信息,与它所在的IP子网或自治系统无关。 属性名公认/可选必遵/任意过渡/非过渡Origin公认必遵—As_PATH公认必遵—Next hop公认必遵—Local-Preference公认任意—MED可选—非过渡Community可选—过渡 🕘 5.1 origin 属性该属性定义了BGP 路径信息源头,实际上也就是BGP Speaker 产生BGP 路由的方式。 有3 种起源属性值:IGP、EGP和Incomplete(不确定来源)。 某条路由是直接而具体的注入到BGP路由表中的,则origin属性为IGP 通过network命令注入BGP的路由这些路由是有选择性地通过network 命令转换为BGP路由,所以称为“半动态”。 Total Number of Routes: 2 BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> 18.0.0.1/32 0.0.0.0 1 0 i *> 18.0.0.2/32 0.0.0.0 1 0 i通过EGP学到的路由,则origin属性为EGP 这个属性在现实网络中将很难遇到,因为EGP 基本上已经退出了历史舞台。其他情形下,Origin属性都为 Incomplete 通过import命令注入BGP的路由 BGP Local router ID is 1.1.1.1 Status codes: * - valid, > - best, d - damped, x - best external, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP, ? – incomplete Total Number of Routes: 4 Network NextHop MED LocPrf PrefVal Path/Ogn *> 18.0.0.1/32 0.0.0.0 1 0 ? *> 18.0.0.2/32 0.0.0.0 1 0 ?Origin属性值默认情况下不被任何路由器修改 IGP:在BGP 路由表中(用display bgp routing-table 查看)将会看到“i”的标识,通过network 命令宣告的路由,起点属性为IGP,此种方式也称为BGP 信息的半动态注入,network 命令所宣告的网络来自于IGP 协议(包括静态路由),这些路由是有选择性地通过network 命令转换为BGP路由,所以称为“半动态”。 EGP:在BGP 路由表中将会看到“E”的标识,通过将EGP 转化(import)成的BGP 路由将具备此属性,这个属性在现实网络中将很难遇到,因为EGP 基本上已经退出了历史舞台。 Incomplete:在BGP 路由表中将会有一个“?”标识,具备这种属性的路由是通过一些别的方式学到的,属于未知的不明确的状态,一般来说,是通过将IGP 或者静态路由引入(import)以后产生的。因为无条件地把IGP 路由信息引入到BGP 路由表可能会造成副作用,比如不要的或者错误的信息会漏(leak)进BGP 中,比如IGP 路由表中可能会包含很多仅仅用于AS 内部的专用地址或者未经注册的地址。除此以外,这样做还有可能造成BGP 路由表的动荡(因为BGP 的路由依赖于IGP 路由),对此问题BGP 提供了一个解决方案路由衰减(ROUTE DAMPENING),此处将不再讨论。 🕘 5.2 AS_PATH 属性假设Internet 上有这样两条路由: 210.52.83.0/24和210.52.82.0/24,而需求是使到网络83 的流量分布在到ISP1 的链路上,而到网络82 的流量分布在到ISP2 的链路上。RT5 分别有两个来源获得82 和83 路由,这样只需要在RT3 和RT4 上适当地对来源的属性进行修改,就可以达到目的。BGP 可以给路由附加一种称为本地优先级的属性,路由器接收到去往同一目的地的多条路由,可以根据本地优先级属性值的高低进行路由选举。 🕘 5.5 MED 属性1.如果此路由的下一跳不可达,忽略此路由 2.评估Preferred-Value值,数值高的优先 (VRP5增加的新参数,指定对等体的首选值,数值越高越好 ) 3.Local-Preference值最高的路由优先 4.聚合路由优先于非聚合路由 5.本地手动聚合路由的优先级高于本地自动聚合的路由 6.本地通过network命令引入的路由的优先级高于本地通过import-route命令引入的路由 7.评估AS路径的长度,最短的路径优先 8.比较Origin属性, IGP优于EGP,EGP优于Incomplete 9.选择MED较小的路由 10. EBGP路由优于IBGP路由 11. EBGP优先选择到BGP下一跳的IGP度量最低的路径 当以上全部相同,则为等价路由,可以负载分担 注:AS_PATH必须完全一致 当负载分担时,以下3条原则无效 13. 比较Cluster-List长度,短者优先 14. 比较Originator_ID(如果没有Originator_ID,则用Router ID比较),选择数值较小的路径 15. 比较对等体的IP地址,选择IP地址数值最小的路径 🕒 6. 路由重分布 在同一网络中,存在多协议并存的情况为了有效地支持多种路由协议,在不同路由协议之间共享路由路由重分布:将一种路由选择协议获悉的路由信息告知另一种路由选择协议 特点: 路由重分布既可以是单向也可以双向通常只有自治系统边界路由器才能实现路由重分布路由分布只能在同一种第三层协议的路由选择进程之间进行存在问题: 路由回环管理距离不同(次优路由)路由信息不兼容(度量值不同)收敛时间不一致注意事项: 不要在同一网络重叠使用路由协议多个边界路由器:使用单向重分布单边界路由器:双向重分布 Router(config-router)#redistribute protocol [process-id] [metric metric-value] [metric-type type-value] [match {internal | external 1 | external 2}] [tag tag-value] [route-map map-tag] [weight weight] [subnet] protocol:源路由协议process-id:进程号metric:度量值metric-type: 一般用于ospf,默认type-2外部路由;如果type-value为1,即type-1外部路由match {internal | external 1 | external 2}]:只用在重分布到其他路由协议的OSPF中weight:重分布到BGP的路由中定义权重(0-65535)subnet:主要用于重分布到OSPF 🕘 6.1 实例将ospf、静态、直连重分配到rip: R(config)#router rip R(config-router)#redistribute ospf 1 metric 1 R(config-router)# redistribute static metric 1 R(config-router)# redistribute connected metric 1注:rip 以跳数作度量,最大为15 跳 将rip 、静态、直连重分配到ospf: R(config)#router ospf 1 R(config-router)#redistribute rip metric 30 subnets R(config-router)# redistribute static metric 100 subnets R(config-router)# redistribute connected metric 100 subnets注:subnets 参数为重分配子网,不加即只重分配主类地址 🕘 6.2 选择最佳路由 多路由协议的使用,产生两个或多个达到目的地的不同路由选择最佳路由:管理距离、默认度量值接受重分布的路由协议要将这些路由协议与自己的度量关联起来,让执行路由重分布的路由器被重分布的路由指定度量值/改变默认度量值也可以改变路由协议的管理距离,改变最佳路由 🕤 6.2.1 改变管理距离 管理距离可以看做是一个可信度的度量管理距离越小,协议的可信度越高通过distance命令改变管理距离 路由选择协议管理距离路由选择协议管理距离直连接口0OSPF110静态接口1RIP120EIGRP90BGP20可信度:直连路由>静态路由>BGP>EIGRP>OSPF>RIP Distance命令: distance weight [address mask [access-list-number | name] ] [ip] weight:实际的管理距离(10-255)address、mask:指定匹配的网络Access-list-number | name:入站更新报文的访问列表的编号/标准IP访问列表的名称ip:用于IS-IS协议实例: R(config)# router ospf 1 R(config-router)# network 172.16.0.0 R(config-router)# distance 255 R(config-router)# distance 110 192.168.31.0 0.0.0.255 🕤 6.2.2 改变默认度量值默认度量值(种子度量值):路由重分布中,从外部重分布进来的路由的初始度量值 路由协议默认种子度量值RIP16(无穷大)EIGRP225(无穷大)OSPFBGP为1,其他为20IS-IS0BGPIGP的度量值default-metric 指令实例: R(config)# router rip R(config-router)# default-metric 4 R(config-router)# redistribute ospf 100 //当OSPF路由重分布到RIP中,默认度量值为4 R(config)# router ospf 100 R(config-router)# default-metirc 10 R(config-router)# redistribute rip //当RIP路由重分布到OSPF中,默认度量值为10 🕒 7. 实验注:R1和R2由于其位置的特殊性(既是IBGP对等体,又是EBGP对等体),因此都配置环回口,作为IBGP的对等体ID。 实验步骤: 一、基本配置 (1)配置所有路由器的接口IP (2)打开接口 二、 配置RIP(以R1为例) R1(config)#router rip R1(config-router)#version 2 R1(config-router)#no auto-summary R1(config-router)#network 192.168.2.0 R1(config-router)#network 192.168.3.0 R1(config-router)#network 1.1.1.0 R1(config-router)#passive-interface f0/1注:RIP只作用在所在区域内,不得跨区域应用(这是BGP的功能),因此在边界处(如R1的f0/1、R2的f0/0)设置被动端口。 三、在R1和R2之间、R1和R3之间开启抓包 根据拓扑图,我们选出的IBGP有R1、R2、R3、R5,EBGP有R1、R2 四、在R1上配置BGP # 启用 BGP路由协议 R1(config)#router bgp 65101 # 配置BGP邻居,其中R2为IBGP对等体 R1(config-router)#neighbor 2.2.2.2 remote-as 65101 R1(config-router)#neighbor 2.2.2.2 update-source loopback0 # 配置R3为EBGP对等体 R1(config-router)#neighbor 192.168.2.3 remote-as 65100 # 路由重分布 R1(config-router)#redistribute rip注:用loopback接口地址作为IBGP邻居标识时,必须指定邻居的更新源接口。 五、在R2上配置BGP R2(config)#router bgp 65101 R2(config-router)#neighbor 1.1.1.1 remote-as 65101 R2(config-router)#neighbor 1.1.1.1 update-source loopback0 R2(config-router)#neighbor 192.168.4.5 remote-as 65102 R2(config-router)#redistribute rip六、在R3上配置BGP R3(config)#router bgp 65100 R3(config-router)#neighbor 192.168.2.1 remote-as 65101 R3(config-router)#redistribute rip七、在R5上配置BGP R5(config)#router bgp 65102 R5(config-router)#neighbor 192.168.4.2 remote-as 65101 R5(config-router)#redistribute rip八、抓包分析 在wireshark的显示过滤器设置过滤条件:bgp,通过观察数据包分析BGP的工作机制
九、查看路由表、BGP路由表、BGP邻居路由器 R1#show ip route R1#show ip bgp R1#show ip bgp neighbors
❗ 转载请注明出处 作者:HinsCoder 博客链接:🔎 作者博客主页 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |